/*
 * Niiuzu
 * Copyright (C) 2011  Thierry Nowak
 * 
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.niiuzu.server.dao;

import com.niiuzu.server.dao.exception.DaoException;
import com.niiuzu.server.model.ParameterName;

/**
 * Gestionnaire des données des paramètres de l'application.
 */
public interface ParameterDao {

	/**
	 * Récupère la valeur du paramètre de l'application à partir de son nom.
	 * 
	 * @param name
	 *            nom du paramètre souhaité.
	 * @return valeur brute du paramètre.
	 * 
	 * @throws DaoException
	 *             erreur technique.
	 */
	String getParameterValue(ParameterName name) throws DaoException;

	/**
	 * Vérifie si le paramètre est activé. Cet état est évalué à partir de la
	 * valeur brute du paramètre :
	 * <ul>
	 * <li>Le paramètre est considéré comme étant activé si la valeur correspond
	 * au booléen {@link Boolean#TRUE}</li>
	 * <li>Il est considéré comme étant désactivé dans tous les autres cas :
	 * <ul>
	 * <li>la valeur correspond au booléen {@link Boolean#FALSE}</li>
	 * <li>la valeur est <tt>null</tt></li>
	 * <li>la valeur ne correspond pas à un booléen</li>
	 * </ul>
	 * </li>
	 * </ul>
	 * 
	 * @param name
	 *            nom du paramètre.
	 * @return <tt>true</tt> si le paramètre est activé, <tt>false</tt> sinon.
	 * 
	 * @throws DaoException
	 *             erreur technique.
	 * 
	 * @see Boolean#parseBoolean(String)
	 */
	boolean isParameterEnabled(ParameterName name) throws DaoException;

}
